package com.zj.dmsproxy.interfaces;

import com.alibaba.fastjson.JSONObject;
import com.zj.baseproxy.model.Page;
import com.zj.dmsproxy.model.DmsInfo;

import java.util.function.Consumer;
import java.util.function.Function;

/**
 * @author arthur_zhou
 */
public interface DmsProxy {
    /**
     * dms取数据通用方法 clazz和返回json字段完全一致（支持下划线转驼峰）
     * 如果是String、BigDecimal、基础类型包装类，会获取第一列数据。因为是JSONObject,第一列的属性随机，所以尽量用在只查一列时使用基础类型包装类。
     *
     * @param clazz   接收返回结果对象
     * @param dmsInfo dms信息
     * @param json    请求json
     * @return 分页
     */
    <T> Page<T> getData(Class<T> clazz, DmsInfo dmsInfo, String json);

    /**
     * dms取数据通用方法 返回json
     *
     * @param dmsInfo dms信息
     * @param json    请求json
     * @return json
     */
    JSONObject getJsonData(DmsInfo dmsInfo, String json);

    /**
     * dms取数据通用方法 遍历收集jsonArray结果集
     *
     * @param dmsInfo dms信息
     * @param json    请求json
     * @param func    函数
     * @return 分页
     */
    <T> Page<T> map(DmsInfo dmsInfo, String json, Function<JSONObject, T> func);


    /**
     * dms通用方法 遍历jsonArray结果集
     *
     * @param dmsInfo  dms信息
     * @param json     请求json
     * @param consumer 函数
     * @return 总数
     */
    Long foreach(DmsInfo dmsInfo, String json, Consumer<JSONObject> consumer);

}
